﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using DAplicaciones1;

namespace persistencia
{
    class BrGift:Broker
    {
        public override void agregar(Object o)
        {
            try
            {
                Gift gift = (Gift)o;
                string sentencia;
                if (gift.Item==null)
                    sentencia = "Insert into Gift(giftOID,descripcion,precio,rangoBase,rangoTope) values ('" + gift.OID + "','" + gift.Descripcion + "'," + gift.Precio + "," + gift.RangoBase + "," +  gift.RangoTope + ")";
                else
                    sentencia = "Insert into Gift(giftOID,itemOID,precio,rangoBase,rangoTope,typeItem) values ('" + gift.OID + "','" + gift.Item.OID + "'," + gift.Precio + "," + gift.RangoBase + "," + gift.RangoTope + ",'" + gift.Item.GetType().Name.ToString() + "')";

                Conexion.ejecutarse(sentencia);
                
            }
            catch (Exception e1)
            {
                throw new System.ArgumentException("No se pudo insertar el gift en la Base de datos");
            }
        }
        public override void modificar(Object o)
        {
            try
            {
                Gift gift = (Gift)o;
                string sentencia;
                if (gift.Item == null)
                    sentencia = "update  Gift set gift.descripcion='" + gift.Descripcion + "',gift.itemOID=Null ,gift.typeItem=Null ,gift.precio=" + gift.Precio + ",gift.rangoBase=" + gift.RangoBase + ",gift.rangoTope=" + gift.RangoTope + " where giftOID='" + gift.OID + "'";
                else
                    sentencia = "update  Gift set gift.itemOID='" + gift.Item.OID + "',gift.precio=" + gift.Precio + ",gift.rangoBase=" + gift.RangoBase + ", gift.rangoTope=" + gift.RangoTope + ",gift.typeItem='" + gift.Item.GetType().Name.ToString() + "',gift.descripcion= Null where giftOID='" + gift.OID + "'";
                
                Conexion.ejecutarse(sentencia);
            }
            catch (Exception e1)
            {
                throw new System.ArgumentException("No se pudo modificar el gift de  en la Base de datos");
            }
        }

        public override void eliminar(Object o)
        {
            try
            {
                Gift gift = (Gift)o;
                string sentencia;
                sentencia = "delete from Gift where giftOID='" + gift.OID + "'";
                Conexion.ejecutarse(sentencia);
            }
            catch (Exception e1)
            {
                throw new System.ArgumentException("No se pudo eliminar el gift de la Base de datos");
            }
        }

        public override void traerDatos(Object o)
        {
        }


        public override ArrayList traerLista(Object o)
        {

            ArrayList al = new ArrayList();
            Gift gift = (Gift)o;
            string sentencia = "select  * from((( (gift g  left join Item i on g.itemOID= i.itemOID) left join Libro l on g.itemOID=l.itemOID) left join Cd cd on g.ItemOID=cd.ItemOID) left join Magazine mz on mz.itemOID=g.itemOID) left join Dvd dv on dv.itemOID=g.itemOID;";
            Conexion.traerDatos(sentencia);
            while (Conexion.DataR.Read())
            {
                gift = new Gift();
                if ( Conexion.obtenerValor("g.itemOID")!=System.DBNull.Value)
                {
                    gift.OID = Conexion.obtenerValor("giftOID").ToString();
                    if (Conexion.obtenerValor("typeItem").ToString()=="Libro")
                    {
                        gift.Item = new Libro(Conexion.obtenerValor("g.itemOID").ToString(), Conexion.obtenerValor("Nombre").ToString(), Double.Parse(Conexion.obtenerValor("i.Precio").ToString()), Double.Parse(Conexion.obtenerValor("Costo").ToString()), Conexion.obtenerValor("Isbn").ToString(), Conexion.obtenerValor("Autor").ToString());
                    }
                    if (Conexion.obtenerValor("typeItem").ToString() == "Cd")
                    {
                        gift.Item = new Cd(Conexion.obtenerValor("g.itemOID").ToString(), Conexion.obtenerValor("Nombre").ToString(), Double.Parse(Conexion.obtenerValor("i.Precio").ToString()), Double.Parse(Conexion.obtenerValor("Costo").ToString()), Conexion.obtenerValor("cd.artista").ToString(), int.Parse( Conexion.obtenerValor("Canciones").ToString()));
                    }
                    if (Conexion.obtenerValor("typeItem").ToString() == "Dvd")
                    {
                        gift.Item = new Dvd(Conexion.obtenerValor("g.itemOID").ToString(), Conexion.obtenerValor("Nombre").ToString(), Double.Parse(Conexion.obtenerValor("i.Precio").ToString()), Double.Parse(Conexion.obtenerValor("Costo").ToString()), Conexion.obtenerValor("dv.artista").ToString(),double.Parse( Conexion.obtenerValor("duracion").ToString()));
                    }
                    if (Conexion.obtenerValor("typeItem").ToString() == "Magazine")
                    {
                        gift.Item = new Magazine(Conexion.obtenerValor("g.itemOID").ToString(), Conexion.obtenerValor("Nombre").ToString(), int.Parse(Conexion.obtenerValor("i.Precio").ToString()), int.Parse(Conexion.obtenerValor("Costo").ToString()),int.Parse( Conexion.obtenerValor("codigo").ToString()), Double.Parse( Conexion.obtenerValor("NroEdicion").ToString()),Double.Parse( Conexion.obtenerValor("Cantpaginas").ToString()));
                    }


                    gift.OID = Conexion.obtenerValor("giftOID").ToString();
                    gift.Precio = Double.Parse(Conexion.obtenerValor("g.Precio").ToString());
                    gift.RangoBase = int.Parse(Conexion.obtenerValor("RangoBase").ToString());
                    gift.RangoTope = Double.Parse(Conexion.obtenerValor("RangoTope").ToString());
                }else
                {
                    gift.OID = Conexion.obtenerValor("giftOID").ToString();
                    gift.Descripcion = Conexion.obtenerValor("Descripcion").ToString();
                    gift.Precio = Double.Parse(Conexion.obtenerValor("g.Precio").ToString());
                    gift.RangoBase = int.Parse(Conexion.obtenerValor("RangoBase").ToString());
                    gift.RangoTope = Double.Parse(Conexion.obtenerValor("RangoTope").ToString());
                }
                al.Add(gift);
            }

            Conexion.finConsulta();

            return al;
        }
    }
}
